package com.lzx.adx.report.util;

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class DateFormatUtils {

    // 预定义常用格式（线程安全）
    private static final DateTimeFormatter INPUT_FORMAT = DateTimeFormatter.BASIC_ISO_DATE; // yyyyMMdd
    private static final DateTimeFormatter OUTPUT_FORMAT = DateTimeFormatter.ISO_LOCAL_DATE; // yyyy-MM-dd

    /**
     * 基础转换方法（默认格式）
     * @param inputDate yyyyMMdd格式字符串
     * @return yyyy-MM-dd格式字符串
     * @throws DateTimeParseException 当输入格式不合法时抛出异常[1,2](@ref)
     */
    public static String convertFormat(String inputDate) throws DateTimeParseException {
        return convertFormat(inputDate, INPUT_FORMAT, OUTPUT_FORMAT);
    }

    /**
     * 自定义格式转换方法
     * @param inputDate 原始日期字符串
     * @param inputPattern 原始格式模式（如"yyyyMMdd"）
     * @param outputPattern 目标格式模式（如"yyyy-MM-dd"）
     * @return 格式化后的字符串
     * @throws DateTimeParseException 当输入格式不合法时抛出异常[2,9](@ref)
     */
    public static String convertFormat(String inputDate, String inputPattern, String outputPattern) {
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(inputPattern);
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputPattern);
        return convertFormat(inputDate, inputFormatter, outputFormatter);
    }

    /**
     * 自定义格式转换方法
     * @param inputDate 原始日期字符串
     * @return 格式化后的字符串
     * @throws DateTimeParseException 当输入格式不合法时抛出异常[2,9](@ref)
     */
    public static String convertDateToStr(String inputDate) {
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        return convertFormat(inputDate, inputFormatter, outputFormatter);
    }


    /**
     * 核心转换逻辑
     * @param inputDate 输入日期字符串
     * @param inputFormatter 输入格式器
     * @param outputFormatter 输出格式器
     * @return 格式化后的字符串[3,7](@ref)
     */
    private static String convertFormat(String inputDate,
                                        DateTimeFormatter inputFormatter,
                                        DateTimeFormatter outputFormatter) {
        LocalDate date = LocalDate.parse(inputDate, inputFormatter);
        return date.format(outputFormatter);
    }

    /**
     * 安全转换方法（返回null代替抛出异常）
     * @param inputDate yyyyMMdd格式字符串
     * @return 格式化后的字符串或null[7,9](@ref)
     */
    public static String safeConvert(String inputDate) {
        try {
            return convertFormat(inputDate);
        } catch (DateTimeParseException e) {
            return null;
        }
    }


    /**
     * 获取当天日期（yyyyMMdd格式）
     * @return 格式化后的当天日期字符串
     */
    public static String getTodayDate() {
        return LocalDate.now().format(INPUT_FORMAT);
    }

    /**
     * 带时区支持的当天日期获取（可选扩展）
     * @param zoneId 时区ID（如"Asia/Shanghai"）
     * @return 格式化后的当天日期字符串
     */
    public static String getTodayDateWithZone(String zoneId) {
        return LocalDate.now(ZoneId.of(zoneId)).format(INPUT_FORMAT);
    }

    public static void main(String[] args) {
        String todayDate = getTodayDate();
        System.out.println(todayDate);
    }
}